from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import copy



# 初始化设置
options = Options()
# 设置浏览器等待规则为dom树加载完成即为页面加载完成，避免浏览器一直加载卡死
desired_capabilities = copy.deepcopy(DesiredCapabilities.CHROME)
desired_capabilities["pageLoadStrategy"] = "eager"
# options.add_experimental_option('debuggerAddress', '127.0.0.1:9201')
# prefs = {'profile.default_content_settings.popups': 0,  # 防止保存弹窗
#          'download.default_directory': tmp_path,  # 设置默认下载路径
#          "profile.default_content_setting_values.automatic_downloads": 1  # 允许多文件下载
#          }
# 设置默认下载路径
prefs = {'download.default_directory': tmp_path,
         }
options.add_experimental_option('prefs', prefs)
# 启动开发者模式，曾经的反反爬措施，现在用处不大
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option("useAutomationExtension", False)
# 加载浏览器插件
options.add_extension(PATH + '/parameters/阿明工具谷歌.crx')
# 关闭gpu，某些服务器之类没有gpu，不写开不了浏览器
options.add_argument('''--disable-gpu''')
# 关闭沙盒模式，关gpu同时也关了，不知道为什么
options.add_argument('''--no-sandbox''')
# 添加useragent
options.add_argument(
    '--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"')
# IP_GET = proxypool.ProxyPool()
# proxy = IP_GET.get_proxy()
# print(proxy)
# 添加浏览器ip代理
options.add_argument("--proxy-server=http://" + proxy)
# 指定浏览器设置及缓存保存地址
# 这边要注意的一个点就是同一台计算机上的浏览器的地址目录结尾的名字不能一样，否则会被判定为同一个浏览器
options.add_argument(r'--user-data-dir=C:\Users\snow\AppData\Local\Google\Chrome\User Data1')
# 指定本地某端口
# options.add_argument("--proxy-server=http://127.0.0.1:8888")
# 关闭不安全报错
# options.add_argument('--ignore-certificate-errors')
# 启动浏览器
driver = webdriver.Chrome(options=options, desired_capabilities=desired_capabilities)
# 运行js修改浏览器webdriver值，防止网站监测，比较高级的反反爬措施
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})""",
})
# 最大化窗口
driver.maximize_window()
# 设置等待时间，例如查找元素时没找到，浏览器会继续等在那查找元素到报错的时间
driver.implicitly_wait(8)
# 获取当前窗口，关闭多余的窗口，切换到正确的窗口
date_handle = driver.current_window_handle
# self.driver.close()
handles = driver.window_handles
correct_handle = None
for handle in handles:
    if handle != date_handle:
        correct_handle = handle
# print('switch to ', handle)
time.sleep(1)
driver.close()  # 关闭当前窗口（搜狗）
driver.switch_to.window(correct_handle)